/**
 *  Includes.h
 *
 *  The includes that are necessary to compile the AMQP library
 *  This file also holds includes that may not be necessary for including the library
 *
 *  @documentation private
 */

// c and c++ dependencies
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <string>
#include <memory>
#include <limits>
#include <ostream>
#include <math.h>
#include <map>
#include <algorithm>
#include <unordered_map>
#include <vector>
#include <queue>
#include <sys/types.h>
// #include <sys/socket.h>
//#include <netdb.h>
//#include <netinet/tcp.h>
#include <unistd.h>
#include <functional>
#include <stdexcept>

// forward declarations
#include "classes.h"

// utility classes
#include "endian.h"
#include "buffer.h"
#include "bytebuffer.h"
#include "receivedframe.h"
#include "outbuffer.h"
#include "watchable.h"
#include "monitor.h"

// amqp types
#include "field.h"
#include "numericfield.h"
#include "decimalfield.h"
#include "stringfield.h"
#include "booleanset.h"
#include "fieldproxy.h"
#include "table.h"
#include "array.h"

// envelope for publishing and consuming
#include "metadata.h"
#include "envelope.h"
#include "message.h"

// mid level includes
#include "exchangetype.h"
#include "flags.h"
#include "callbacks.h"
#include "deferred.h"
#include "deferredconsumer.h"
#include "deferredqueue.h"
#include "deferreddelete.h"
#include "deferredcancel.h"
#include "deferredget.h"
#include "deferredconfirm.h"
#include "deferredreturn.h"
#include "channelimpl.h"
#include "channel.h"
#include "login.h"
#include "address.h"
#include "connectionhandler.h"
#include "connectionimpl.h"
#include "connection.h"

// classes that are very commonly used
#include "exception.h"
#include "protocolexception.h"
#include "frame.h"
#include "extframe.h"
#include "methodframe.h"
#include "headerframe.h"
#include "connectionframe.h"
#include "channelframe.h"
#include "exchangeframe.h"
#include "queueframe.h"
#include "basicframe.h"
#include "transactionframe.h"
#include "addressinfo.h"


